package locadora.negocio;

import java.io.FileNotFoundException;
import java.io.IOException;

import locadora.negocio.produtos.Item;
import miscelanea.Data;


public interface GerenciamentoItens {
		
		/**
		 * Busca um Item com chave única na camada de dados
		 * @param chave chave única de um Item
		 * @return referência para o Objeto encontrado ou null, caso contrário
		 * @throws FileNotFoundException
		 * @throws IOException
		 * @throws ClassNotFoundException
		 */
		public Item buscarItem(String chave) throws FileNotFoundException, IOException, ClassNotFoundException;
		
		/**
		 * Adiciona um novo Item à camada de dados
		 * @param pessoa objeto a adicionar
		 * @throws Exception
		 */
		public void adicionar(Item item) throws Exception;
		
		/**
		 * Remove da camada de dados um Item com chave igual à passada por parâmetro
		 * @param chave chave única do Item
		 * @throws Exception
		 */
		public void removerItem(String chave) throws Exception;
		
		/**
		 * Atualiza o objeto cuja chave é igual à passada por parâmetro para possuir os mesmos valores dos atributos
		 * do segundo parâmetro
		 * @param chave chave única do objeto a ser atualizado
		 * @param pessoa objeto de onde serão retirados os dados para atualização
		 * @throws Exception
		 */
		public void atualizar(String chave, Item item) throws Exception;
		
		/**
		 * Aluga um Item a uma pessoa identificada por uma chave única.
		 * @param chavePessoa chave única de uma Pessoa, no formato XXXXXXXXXXX, onde X representa um algarismo
		 * @param chaveItem chave única do Item a ser alucado
		 * @param dataLocacao data da locação
		 * @param dataDevolucao data de devolução
		 * @throws Exception
		 */
		public void realizarEmprestimo(String chavePessoa, String chaveItem, Data dataLocacao, Data dataDevolucao) throws Exception;
		
		/**
		 * Aluga um Item a uma pessoa identificada por uma chave única.
		 * @param chavePessoa chave única de uma Pessoa, no formato XXXXXXXXXXX, onde X representa um algarismo
		 * @param chaveItem chave única do Item a ser alucado
		 * @param dataLocacao data da locação
		 * @param dataDevolucao data de devolução
		 * @throws Exception
		 */
		public void devolverItem(String chavePessoa, String chaveItem, Data dataDevolucao, float adicionalPorAtraso, float credito) throws Exception;
		
}